﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SIM.Geo.DA;
using SIM.Geo.BE;

namespace SIM.Geo.BL
{
    public class BLTipoMaterialMuestra
    {
        #region Metodos
        /// <summary>
        /// Método devuelve la lista de tipo material muestra
        /// </summary>
        /// <returns></returns>
        public List<TipoMaterialMuestra> ListarTipoMaterialMuestra()
        {
            return Accesor.ListarTipoMaterialMuestra();
        }

        /// <summary>
        /// Método inserta una nueva tipo material muestra
        /// </summary>
        /// <param name="zona"></param>
        /// <returns></returns>
        public int InsertarTipoMaterialMuestra(TipoMaterialMuestra tipoMaterialMuestra)
        {
            int codigoNuevo = this.GenerarCodigoTipoMaterialMuestra();
            tipoMaterialMuestra.CodigoTipoMaterialMuestra = codigoNuevo;
            return Accesor.InsertarTipoMaterialMuestra(tipoMaterialMuestra);
        }

        /// <summary>
        /// Método modifica una tipo material muestra
        /// </summary>
        /// <param name="zona"></param>
        public void ModificarTipoMaterialMuestra(TipoMaterialMuestra tipoMaterialMuestra)
        {
            var tipoMaterialMuestraEdit = Accesor.ObtenerTipoMaterialMuestra(tipoMaterialMuestra.CodigoTipoMaterialMuestra);
            tipoMaterialMuestraEdit.CodigoTipoMaterialMuestra = tipoMaterialMuestra.CodigoTipoMaterialMuestra;
            tipoMaterialMuestraEdit.Descripcion = tipoMaterialMuestra.Descripcion;
            Accesor.ModificarTipoMaterialMuestra(tipoMaterialMuestraEdit);
        }

        /// <summary>
        /// Método elimina tipo material muestra
        /// </summary>
        /// <param name="zona"></param>
        public void EliminarTipoMaterialMuestra(int codigoTipoMaterialMuestra)
        {
            var TipoMaterialMuestra = this.ObtenerTipoMaterialMuestra(codigoTipoMaterialMuestra);
            Accesor.EliminarTipoMaterialMuestra(TipoMaterialMuestra);
        }

        /// <summary>
        /// Método devuelve una tipo material muestra por codigo
        /// </summary>
        /// <param name="codigoZona"></param>
        /// <returns></returns>
        public TipoMaterialMuestra ObtenerTipoMaterialMuestra(int codigoTipoMaterialMuestra)
        {
            return Accesor.ObtenerTipoMaterialMuestra(codigoTipoMaterialMuestra);
        }

        /// <summary>
        /// Lista Tipo Material Muestra por Nombre , si usa para hacer validaciones en la App
        /// </summary>
        /// <param name="nombreTipoMaterialMuestra"></param>
        /// <returns></returns>
        public List<TipoMaterialMuestra> ListarTipoMaterialMuestraPorNombre(string nombreTipoMaterialMuestra)
        {
            return Accesor.ListarTipoMaterialMuestraPorNombre(nombreTipoMaterialMuestra);
        }

        /// <summary>
        /// Método devuelve la lista para ComboBox, DropdownList, devuelve campos Value y Text
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem()
        {
            var result = Accesor.ListarTipoMaterialMuestra();
            return result.Select(x => new ListItemInt { Value = x.CodigoTipoMaterialMuestra, Text = x.Descripcion }).OrderBy(x => x.Text).ToList();
        }
        #endregion
        #region Utilidades
        /// <summary>
        /// Método que genera el codigo Tipo Material Muestra
        /// </summary>
        /// <returns></returns>
        public int GenerarCodigoTipoMaterialMuestra()
        {
            int codigoMaximo = 1;
            var lista = Accesor.ListarTipoMaterialMuestra();
            if (lista.Count > 0)
            {
                codigoMaximo = lista.OrderByDescending(x => x.CodigoTipoMaterialMuestra).FirstOrDefault().CodigoTipoMaterialMuestra + 1;
            }
            return codigoMaximo;
        }
        #endregion

        #region Accesor
        private static DATipoMaterialMuestra Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DATipoMaterialMuestra(); }
        }
        #endregion
    }
}
